/**
 * Created by Administrator on 2017/4/22.
 */
var mongo = require('./db');
var markdown = require('markdown').markdown;
function Post(name, title, tags,post) {
    this.name = name;
    this.title = title;
    this.tags = tags;
    this.post = post;
}
module.exports = Post;
//存储一篇文章及其相关信息
Post.prototype.save = function (callback) {
    var date = new Date();
    var time = {
        date:date,
        year:date.getFullYear(),
        month:date.getFullYear() + '-' + (date.getMonth() < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1),
        day:date.getFullYear() + '-' + (date.getMonth() < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-' + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()),
        minute:date.getFullYear() + '-' + (date.getMonth() < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 ) + '-' + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ' + (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':' + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':' +
        (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds())
    }
    var post = {
        name:this.name,
        time:time,
        title:this.title,
        tags:this.tags,
        post:this.post,
        comments:[],
        pv:0
    }
    // console.log('post')
    //打开数据库
    mongo.open(function (err, db) {
        if(err){
            return callback(err);
        }
        db.collection('posts',function (err, collection) {
            if(err){
                mongo.close();
                return callback(err);
            }
            collection.insert(post,{safe:true},function (err,post) {
                mongo.close();
                if(err){
                    return callback(err);
                }
                // console.log('1');
                return callback(null);//保存文章不需要返回信息
            })
        })
    })
}
//读取文章相关信息
Post.getFifteen = function(name,page,callback){
    mongo.open(function(err,db){
        if(err){
            return callback(err);
        }
        db.collection('posts',function(err,collection){
            if(err){
                mongo.close();
                return callback(err);
            }
            var query = {};
            if(name){
                query.name = name;
            }
            //查询
            collection.count(query,function(err,total){
                //total是查询的文章总数量
                collection.find(query,{
                    //根据当前的页数算出每页开始的位置pageStart
                    skip: (page - 1) * 15,
                    //pageSize 理解为步长
                    limit:15
                }).sort({
                    time:-1
                }).toArray(function(err,docs){
                    mongo.close();
                    if(err){
                        return callback(err);
                    }
                    callback(null,docs,total);
                })
            })
        })
    })
}
//获取一片文章
Post.getOne = function (name, minute, title, callback) {
    mongo.open(function (err, db) {
        if(err){
            return callback(err);
        }
        db.collection('posts',function (err, collection) {
            if(err){
                mongo.close();
                return callback(err);
            }
            collection.findOne({
                "name":name,
                "time.minute":minute
            },function (err, doc) {
                if(err){
                    mongo.close();
                    return callback(err);
                }
                if (doc) {
                    //每访问 1 次，pv 值增加 1
                    collection.update({
                        "name": name,
                        "time.minute": minute,
                        "title": title
                    }, {
                        $inc: {"pv": 1}
                    }, function (err) {
                        mongo.close();
                        if (err) {
                            return callback(err);
                        }
                    });
                    callback(null, doc);
                }
            })
        })
    })
}
//编辑一篇文章
Post.edit = function(name, minute, title, callback) {
    //打开数据库
    mongo.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }

            //根据用户名、发表日期及文章名进行查询
            collection.findOne({
                "name": name,
                "time.minute": minute,
                "title": title
            }, function (err, doc) {
                mongo.close();
                if (err) {
                    return callback(err);
                }
                callback(null, doc);
            });
        });
    });
};
//更新文章
Post.update = function (name, minute, title, post, callback) {
    mongo.open(function (err, db) {
        if(err){
            return callback(err);
        }
        db.collection('posts',function (err, collection) {
            if(err){
                mongo.close();
                return callback(err);
            }
        collection.update({
            "name":name,
            "time.minute":minute,
            "title":title
        },{
            $set:{post:post}
        },function (err) {
            mongo.close();
            if(err){
                return callback(err);
            }
            callback(null);
            })
        })
    })
}
//删除一篇文章
Post.remove = function(name, minute, title, callback) {
    //打开数据库
    mongo.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            //根据用户名、日期和标题查找并删除一篇文章
            collection.remove({
                "name": name,
                "time.minute": minute,
                "title": title
            }, {
                w: 1
            }, function (err) {
                mongo.close();
                if (err) {
                    return callback(err);
                }
                callback(null);
            });
        });
    });
};
//返回所有标签
Post.getTags = function(callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('posts', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            //distinct 用来找出给定键的所有不同值
            collection.distinct("tags", function (err, docs) {
                mongo.close();
                if (err) {
                    return callback(err);
                }
                callback(null, docs);
            });
        });
    });
};
//返回存档信息
Post.getArchive = function(callback) {
    //打开数据库
    mongo.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            //返回只包含 name、time、title 属性的文档组成的存档数组
            collection.find({}, {
                "name": 1,
                "time": 1,
                "title": 1
            }).sort({
                time: -1
            }).toArray(function (err, docs) {
                mongo.close();
                if (err) {
                    return callback(err);
                }
                callback(null, docs);
            });
        });
    });
};
//索引功能
Post.search = function(keyword, callback) {
    mongo.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('posts', function (err, collection) {
            if (err) {
                mongo.close();
                return callback(err);
            }
            var pattern = new RegExp(keyword, "i");
            collection.find({
                "title": pattern
            }, {
                "name": 1,
                "time": 1,
                "title": 1
            }).sort({
                time: -1
            }).toArray(function (err, docs) {
                mongo.close();
                if (err) {
                    return callback(err);
                }
                callback(null, docs);
            });
        });
    });
};
